package day23.homework;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * Teacher类的测试类
 * 演示两种排序方式：
 * 1. 使用Teacher类实现的Comparable接口进行排序
 * 2. 使用自定义Comparator接口进行排序
 */
public class TeacherTest {
    /**
     * 主方法，程序入口
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        System.out.println("=== 使用Teacher类实现的Comparable接口排序 ===");
        testWithComparable();
        
        System.out.println("\n=== 使用自定义Comparator接口排序 ===");
        testWithComparator();
    }
    
    /**
     * 使用Teacher类实现的Comparable接口进行排序
     * TreeSet会自动使用Teacher类中实现的compareTo方法进行排序
     */
    public static void testWithComparable() {
        // 创建TreeSet集合，使用Teacher类自带的排序规则
        TreeSet<Teacher> teachers = new TreeSet<>();
        
        // 添加测试数据
        teachers.add(new Teacher(3, "张三", 30));
        teachers.add(new Teacher(1, "李四", 25));
        teachers.add(new Teacher(5, "张三", 30));
        teachers.add(new Teacher(2, "王五", 35));
        teachers.add(new Teacher(4, "张三", 25));
        teachers.add(new Teacher(6, "李四", 25));
        
        System.out.println("排序结果：");
        // 遍历并打印排序后的结果
        for (Teacher teacher : teachers) {
            System.out.println(teacher);
        }
    }
    
    /**
     * 使用自定义Comparator接口进行排序
     * 通过自定义比较器实现与Comparable接口相同的排序逻辑
     */
    public static void testWithComparator() {
        // 创建自定义Comparator
        Comparator<Teacher> teacherComparator = new Comparator<Teacher>() {
            /**
             * 实现compare方法，定义Teacher对象的比较规则
             * 排序规则：
             * 1. 首先按姓名排序（字典序）
             * 2. 姓名相同时按年龄排序（升序）
             * 3. 年龄相同时按ID排序（升序）
             * @param t1 第一个Teacher对象
             * @param t2 第二个Teacher对象
             * @return 比较结果：负数表示t1小于t2，0表示相等，正数表示t1大于t2
             */
            @Override
            public int compare(Teacher t1, Teacher t2) {
                // 先通过名字排序
                int nameCompare = t1.getName().compareTo(t2.getName());
                if (nameCompare != 0) {
                    return nameCompare;
                }
                
                // 名字相同的时候通过年龄排序
                int ageCompare = Integer.compare(t1.getAge(), t2.getAge());
                if (ageCompare != 0) {
                    return ageCompare;
                }
                
                // 年龄相同时通过id排序
                return Integer.compare(t1.getId(), t2.getId());
            }
        };
        
        // 创建TreeSet集合，使用自定义的比较器
        TreeSet<Teacher> teachers = new TreeSet<>(teacherComparator);
        
        // 添加测试数据
        teachers.add(new Teacher(3, "张三", 30));
        teachers.add(new Teacher(1, "李四", 25));
        teachers.add(new Teacher(5, "张三", 30));
        teachers.add(new Teacher(2, "王五", 35));
        teachers.add(new Teacher(4, "张三", 25));
        teachers.add(new Teacher(6, "李四", 25));
        
        System.out.println("排序结果：");
        // 遍历并打印排序后的结果
        for (Teacher teacher : teachers) {
            System.out.println(teacher);
        }
    }
}